gensim模型中单词不在词汇表中的错误


from bs4 import BeautifulSoup
import requests
cont = requests.get("https://ichi.pro/tr/veri-biliminde-uzaklik-olculeri-159983401462266").content
soup = BeautifulSoup(cont,"html.parser")
metin = soup.text
import re
sonuç1 = re.search("1. Öklid Mesafesi",metin)
sonuç2 = re.search('Okuduğunuz için teşekkürler!',metin)
metin = metin[sonuç1.start():sonuç2.start()].split("n")
from gensim.models import Word2Vec
model = Word2Vec(metin,size=200,window=15,min_count=5,sg=5)
model.wv["Jaccard mesafesi"]

metin是:

....'     Jaccard mesafesi',
'    ',
'',
'Dezavantajları',
'Jaccard endeksinin önemli bir dezavantajı, verilerin büyüklüğünden oldukça etkilenmesidir. Büyük veri kümelerinin endeks üzerinde büyük bir etkisi olabilir, çünkü kesişme noktasını benzer tutarken birleşmeyi önemli ölçüde artırabilir.',
'Kullanım Durumları',
'Jaccard indeksi, genellikle ikili veya ikili verilerin kullanıldığı uygulamalarda kullanılır. Bir görüntünün segmentlerini, örneğin bir arabayı tahmin eden bir derin öğrenme modeliniz olduğunda, Jaccard indeksi daha sonra, doğru etiketler verilen tahmin edilen segmentin ne kadar doğru olduğunu hesaplamak için kullanılabilir.',
'Benzer şekilde, belgeler arasında ne kadar kelime seçiminin örtüştüğünü ölçmek için metin benzerlik analizinde kullanılabilir. Böylece, desen setlerini karşılaştırmak için kullanılabilir.',
'8. Haversine',
'',
'',
'',
'     Haversine mesafesi. Yazar tarafından görüntü.',
'    ',
....

注意:我是土耳其人,所以我的内容是土耳其人,但这并不重要第二个注意事项:ı尝试另一个词,但ı不能训练模型?ı应该怎么做?

存在多个问题:

  1. 如果你想要一个土耳其语模型,你可以尝试为土耳其文找到一个预先训练的Word2Vec模型(例如,查看这个存储库(,或者自己训练一个土语模型。你现在使用它的方式似乎是训练一个模型,但只能从一个网站上训练,这个网站几乎不会做任何事情,因为这个模型需要大量的句子来学习任何东西(比如至少10000个,更好的是更多(。此外,您还设置了min_count=5,因此任何出现次数少于5次的单词通常都会被忽略。试着在土耳其语维基百科上训练它,看看链接的存储库。

  2. Word2Vec默认情况下是一个unigram模型,因此输入是一个单个单词。如果你交给它一个由两个单词组成的bigram,比如"Jaccard mesafesi",它什么都找不到。此外,您还应该注意单词不在词汇表中的情况,否则每个未知单词都会导致错误,您的程序将被取消。搜索每个令牌的unigram表示,然后将两者结合起来,例如使用向量的统计平均值:

    import numpy
    ngram = "Jaccard mesafesi"
    split_ngram = ngram.split()
    try:
    ngram_vector = []
    for w in split_ngram:
    ngram_vector.append(model.wv[w])
    ngram_vector = numpy.mean(unigram_vectors, axis=0)
    except:
    ngram_vector = None
    print(f"Word {word} is not in vocabulary")
    
  3. 用于训练的Word2Vec类将tokenized句子列表作为自变量,因此列表单词列表。相反,你交了完整的、未经修饰的句子。

最新更新