Jak stworzyć dobrą listę haseł

9

Szukam wskazówek, jak stworzyć listę haseł. Czy ktoś wie / czy ktoś może zalecić dobrą metodę wyodrębnienia list słów-słów z samego zbioru danych w celu wstępnego przetwarzania i filtrowania?

Dane:

ogromna ilość tekstu ludzkiego o zmiennej długości (wyszukiwarki i całe zdania (do 200 znaków)) przez kilka lat. Tekst zawiera dużo spamu (np. Dane wejściowe z botów, pojedyncze słowa, głupie wyszukiwania, wyszukiwania produktów ...) i tylko kilka% z nich wydaje się przydatne. Uświadomiłem sobie, że czasami (bardzo rzadko) ludzie przeszukują moją stronę, zadając naprawdę fajne pytania. Te pytania są tak fajne, że uważam, że warto przyjrzeć się im głębiej, aby zobaczyć, jak ludzie szukają w czasie i jakie tematy zainteresowali się moją witryną.

Mój problem:

jest to, że naprawdę walczę z przetwarzaniem wstępnym (tj. usuwam spam). Próbowałem już trochę listy słów kluczowych z Internetu (NLTK itp.), Ale tak naprawdę nie zaspokajają moich potrzeb dotyczących tego zestawu danych.

Dziękujemy za pomysły i dyskusje!

PlagTag
źródło
1
Moduł Python NLTK dostarcza dane stopwords i jeśli nie pomogło ci to lepiej dostarczyć więcej informacji o twoim zestawie danych. Dlaczego nie było to pomocne w twoim przypadku?
Kasra Manshaei
@kasramsh: Kiedy filtrowałem te SW, miałem wrażenie, że nie odfiltrowało to znacząco spamu. Myślę, że powodem jest to, że te listy są generowane na naturalnych tekstach (niepewne) i dlatego nie nadają się do wyszukiwania haseł i zapytań witryn. Podobnie jak w przypadku klastrowania (na podstawie podobieństwa ciągu wyszukiwania) miałem wrażenie, że spam ma silny wpływ na poziomie entropii, a tym samym miesza wynik końcowy: - /.
PlagTag
1
Myślę, że @PlagTag nie rozumiem, co jest stop words. Stop-wrods znajduje się lista najczęstszych słów w jakimś języku, na przykład I, the, ai tak dalej. Po prostu usuniesz te słowa z tekstu, zanim zaczniesz trenować algorytm, który próbuje zidentyfikować, który tekst jest spamem, czy nie. Nie pomógł ci ustalić, który tekst jest spamem, czy nie, może poprawić algorytm uczenia się.
itdxer
@itdxer, dzięki za komentarz. Użyłem tutaj terminu stopwords w szerszym zakresie (ponieważ myślałem, że może być w tym celu w porządku). Dziękujemy za wyjaśnienie problemu ;-)
PlagTag

Odpowiedzi:

5

Jednym z podejść byłoby użycie wyniku tf-idf . Słowa występujące w większości zapytań niewiele pomogą w odróżnieniu dobrych zapytań od złych. Ale te, które występują bardzo często (wysoka tf lub częstotliwość-terminów) tylko w kilku zapytaniach (wysoka idf lub odwrotna częstotliwość dokumentów), które prawdopodobnie będą ważniejsze w odróżnianiu dobrych zapytań od złych.

Shagun Sodhani
źródło
bardzo dziękuję, wypróbuję ten i zgłoś się tutaj!
PlagTag
właściwie sam wysoki wynik IDF wystarczyłby
CpILL
2

To zależy od twojej aplikacji.

Podczas modelowania tematów wypróbuj najpierw domyślne hasła. Kiedy w wielu tematach pojawiają się wyraźne słowa (zwróć uwagę na moje dość niejasne sformułowanie), są dobrymi kandydatami na dodatkowe hasła.

Np. W korpusie z tekstami zawierającymi ryciny i materiały tabelaryczne, słowa „fig”, „figura”, „tab” lub „tabela” są dobrymi dodatkowymi hasłami. W rezultacie Twoje tematy stają się lepiej zdefiniowane.


źródło
1

Użycie TFIDF (termin odwrotna częstotliwość dokumentów) rozwiąże twój cel. Uzyskaj wynik TFIDF dla każdego słowa w dokumencie i posortuj słowa według ich wyników, według których możesz wybrać ważne słowa w swoich danych.

Thilak Adiboina
źródło
1

Podejście, którego użyłem do zbudowania listy słów kluczowych, to zbudowanie i wyszkolenie modelu regresji logistycznej (ze względu na jego interpretowalność) na danych tekstowych. Weź wartość bezwzględną współczynników dla każdego tokena. Następnie posortuj malejącą wartość bezwzględną współczynników tokenów. Następnie utwórz listę wszystkich tokenów o wysokiej wartości bezwzględnej o wysokim współczynniku, które mogą prowadzić do nadmiernego dopasowania lub które mogą spełniać inne kryteria, aby być słowem kluczowym. Ta lista jest Twoją listą stopwords. Następnie możesz zastosować tę listę słów kluczowych do innego zestawu dokumentów tego typu (coś w rodzaju zestawu testowego), aby sprawdzić, czy ich usunięcie zwiększa dokładność, precyzję lub przywołanie modelu zestawu testowego.

Ta strategia jest skuteczna, ponieważ uwzględnia wpływ tokenów podczas tworzenia listy słów kluczowych.

dshefman
źródło
0

W pewnym momencie stopery mogą być częścią rozwiązania, ale nie kluczem. W każdym przypadku dla głównych języków istnieją dobre listy słów kluczowych, nie powinny one być specyficzne dla domeny.

Nie sądzę też, aby samo używanie TD-IDF było naprawdę poprawne. Mogą występować bardzo rzadkie (potencjalnie śmieci) słowa w łańcuchach niskiej jakości.

Zamiast zgadywać, które dokładne funkcje są przydatne: zacznę od utworzenia zestawu danych przez losowe wybranie niektórych danych i etykietowanie ich ręcznie (jako goodlub bad, lub w skali od 0,0 do 1,0). Następnie napisz coś, co wyciągnie wiele funkcji (długość, liczbę słów (tokenów), wynik spamu, czy zawiera adresy URL lub znaki botów, wykryty język, czy ma znak zapytania, czy ma odpowiednią wielkość liter). Nie zapomnij także o dodaniu funkcji niejęzykowych, takich jak kraj geoIP użytkownika, który wykonał zapytanie, czy użytkownik był zalogowany, ile lat ma konto użytkownika. W tym momencie będziesz mieć ogromną tabelę / CSV i mniejszą z jedną dodatkową kolumną dla dodanej etykiety.

Następnie przećwicz pakiet uczenia maszynowego z tymi etykietowanymi przykładami, aby zbudować model, który będzie dla Ciebie wystarczająco dokładny. Następnie pozwól temu modelowi działać na pozostałych danych.

Jeśli nie chcesz za dużo kodować, możesz nawet przenieść te funkcje do postaci CSV i przekazać je interfejsowi arkusza kalkulacyjnego Google Prediction API .

Adam Bittlingmayer
źródło