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

word not in vocabulary error in gensim model

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 模型(例如查看 this repository)或自己训练土耳其语模型。你现在使用它的方式似乎是在训练一个模型,但只能从一个网站上训练,这几乎不会做任何事情,因为模型需要大量的句子来学习任何东西(比如至少 10.000,更好的多)。此外,您还设置了 min_count=5,因此出现次数少于 5 次的任何单词通常都会被忽略。尝试在土耳其维基百科上训练它,查看链接的存储库。

  2. Word2Vec 默认是一个 unigram 模型,所以输入是一个 单个 单词。如果你给它一个由两个词组成的二元组,比如 "Jaccard mesafesi" 它不会找到任何东西。您还应该注意单词不在词汇表中的情况,否则每个未知单词都会导致错误并且您的程序会取消。搜索每个标记的一元表示,然后将两者结合起来,例如通过使用向量的统计平均值:

    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 class 将 tokenized 句子列表作为参数,因此列表单词列表。你给了它完整的、未标记化的句子。