Anahtar kelimelerin iyi bir listesi nasıl oluşturulur


9

Bir engellenecek kelimeler listesinin nasıl seçileceğine dair bazı ipuçları arıyorum. Birisi önişleme ve filtreleme için veri kümesinin kendisinden engellenecek kelime listelerini çıkarmak için iyi bir yöntem biliyor mu / önerebilir mi?

Veri:

birkaç yıl içinde değişken uzunlukta (arama ve tam cümleler (200 karaktere kadar)) çok sayıda insan metni girişi. Metin çok fazla spam içeriyor (botlardan makine girişi, tek kelime, aptal aramalar, ürün aramaları gibi) ve bunların yalnızca% 1'i yararlı gibi görünüyor. Bazen (çok nadiren) insanların gerçekten harika sorular sorarak tarafımı aradıklarını fark ettim. Bu sorular o kadar güzel ki, insanların zaman içinde nasıl arama yaptığını ve insanların web sitemi kullanmakla ilgilendikleri konuları görmek için onlara daha derin bir göz atmaya değer olduğunu düşünüyorum.

Benim sorunum:

i gerçekten önişleme ile mücadele (yani spam bırakarak) olmasıdır. Zaten web'den (NLTK vb.) Bazı engellenenler listesi denedim, ancak bunlar gerçekten bu veri kümesiyle ilgili ihtiyaçlarıma yardımcı olmuyor.

Fikirleriniz ve tartışma arkadaşlarınız için teşekkürler!


1
Python NLTK modülü stopwords verileri sağlar ve yardımcı olmadıysa, veri kümeniz hakkında daha fazla bilgi sağlar. Durumunuzda neden yardımcı olmadı?
Kasra Manshaei

@kasramsh: Bu SW'ler için filtre uygulandığında, bu spam önemli ölçüde filtre değil izlenimi vardı. Bunun nedeni, bu listenin doğal metinler (emin değilim) üzerine oluşturulması ve bu nedenle arama sözcükleri ve site sorguları için kullanılamamasıdır. Küme (arama dizesi benzerliğine dayalı olarak) gibi spam spam entropi düzeyinde güçlü bir etkiye sahip ve böylece sonucu karıştırıyor izlenimi vardı: - /.
PlagTag

1
Sanırım @PlagTag ne olduğunu anlamıyor stop words. Dur-wrods bazı dilinde en sık kullanılan kelimeler, örneğin bir listesidir I, the, avb. Hangi metnin spam olup olmadığını belirlemeye çalışan algoritmanızı geliştirmeye başlamadan önce bu kelimeleri metninizden kaldıracaksınız. Hangi metnin spam olup olmadığını belirlemenize yardımcı olmadı, öğrenme algoritmanıza bazı iyileştirmeler sağlayabilir.
itdxer

@itdxer, yorumunuz için teşekkürler. Terim kelimeler burada daha geniş bir kapsamda kullanılan (amaç için Tamam olabilir düşündüm gibi). Sorunu
giderdiğiniz

Yanıtlar:


5

Bir yaklaşım tf-idf skoru kullanmak olacaktır . Sorguların çoğunda oluşan sözcükler, iyi arama sorgularının kötü olanlardan ayırt edilmesinde çok az yardımcı olacaktır. Ancak, yalnızca birkaç sorguda (yüksek idf veya ters belge sıklığı) çok sık (yüksek tf veya terim sıklığı) meydana gelenlerin, iyi sorguların kötü olanlardan ayırt edilmesinde daha önemli olması muhtemeldir.


çok thx, ben bunu denemek ve burada rapor!
PlagTag

aslında tek başına yüksek bir IDF puanı işe
yarayacaktır

2

Uygulamanıza bağlıdır.

Konu modelleme yaparken, önce varsayılan stopwords'leri deneyin. Birçok konuda belirgin bir şekilde ortaya çıkan bazı kelimeler olduğunda (oldukça belirsiz formülasyonuma dikkat edin) ek anahtar kelimeler için iyi adaylardır.

Örneğin, şekil ve tablo malzemesi içeren metinlerin bulunduğu bir grupta, "incir", "şekil", "sekme" veya "tablo" kelimeleri iyi ek anahtar kelimelerdir. Sonuç olarak, konularınız daha iyi tanımlanır.


1

TFIDF (terim frekansı ters belge sıklığı) kullanmak amacınızı çözecektir. Belgenizdeki her kelime için TFIDF puanını alın ve verilerinizdeki önemli kelimeleri seçebileceğiniz kelimeleri puanlarına göre sıralayın.


1

Anahtar kelime listesi oluşturmak için kullandığım bir yaklaşım, metin verileriniz üzerinde bir lojistik regresyon modeli (yorumlanabilirliği nedeniyle) oluşturmak ve eğitmektir. Her jeton için katsayıların mutlak değerini alın. Ardından, belirteçlerin katsayılarının mutlak değerini azalan sıralama. Ardından, aşırı sığmaya yol açabilecek veya diğer bazı ölçütleri karşılayabilecek yüksek katsayılı mutlak değere sahip tüm tokenlerin bir listesini oluşturun. Bu liste engellenecek kelimeler listenizdir. Daha sonra, bunları kaldırmanın test seti modelinin doğruluğunu, kesinliğini veya geri çağırmasını artırıp artırmadığını görmek için söz konusu anahtar kelime listesini bu tür başka bir belge grubuna (bir tür test seti gibi) uygulayabilirsiniz.

Bu strateji etkilidir, çünkü bir anahtar kelime listesi oluştururken belirteçlerin etkisini dikkate alır.


0

Stopwords bir noktada çözümün bir parçası olabilir, ancak anahtar olmayabilir. Her halükarda, herhangi bir büyük dil için iyi durma sözcükleri listesi mevcuttur, bu alan adına özgü olmamalıdır.

Ayrıca TD-IDF'yi tek başına kullanmanın gerçekten doğru olduğunu düşünmüyorum. Düşük kaliteli dizelerde çok nadir (potansiyel olarak çöp) kelimeler olabilir.

Hangi kesin özelliklerin yararlı olduğunu tahmin etmeye çalışmak yerine: Verilerden bazılarını rastgele seçerek ve bunları elle etiketleyerek ( goodveya olarak veya bad0.0 ile 1.0 arasında bir ölçekte) bir veri kümesi oluşturarak başlayacağım . Ardından, birçok özelliği (uzunluk, kelime sayısı (belirteçler), spam puanı, URL'ler veya bot karakterleri içerip içermediğini, algılanan dili, soru işaretine sahip olup olmadığını, uygun büyük harflere sahip olup olmadığını) ortaya çıkaran bir şeyi kodlayın. Ayrıca, sorguyu yapan kullanıcının geoIP ülkesi, kullanıcının oturum açmış olup olmadığı, kullanıcının hesabının kaç yaşında olduğu gibi sahip olabileceğiniz dil dışı özellikleri de eklemeyi unutmayın. Bu noktada büyük bir tablonuz / CSV'niz ve eklediğiniz etiket için fazladan bir sütun içeren daha küçük bir tablonuz olacak.

Ardından, sizin için yeterince doğru bir model oluşturmak üzere bu etiketli örneklerle makine öğrenimi paketini eğitin. Ardından bu modelin verilerin geri kalanında çalışmasına izin verin.

Çok fazla kod yazmak istemiyorsanız, bu özellikleri CSV formuna bile alabilir ve Google Tahmin API'sının e-tablo arayüzüne verebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.