罕见的拼写错误的单词弄乱了我的 fastText/Word-Embedding Classfiers
rare misspelled words messes my fastText/Word-Embedding Classfiers
我目前正在尝试对 IMDB 评论数据集进行情感分析,作为我大学家庭作业的一部分,我需要首先进行一些预处理,例如:标记化,停用词去除,词干提取,词形还原。然后使用不同的方法将这些数据转换为向量以由不同的分类器进行分类,Gensim FastText 库是在我从文本预处理步骤获得的数据上获得词嵌入所需的模型之一。
我在使用 Gensim 时遇到的问题是,我首先尝试使用特征大小 (100,200,300) 的向量来训练我的数据,但它们总是在某些时候失败,后来我尝试使用许多预训练的 Gensim 数据向量,但是他们中的 none 努力寻找所有单词的词嵌入,他们宁愿在某个时候因错误
而失败
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-28-644253c70aa3> in <module>()
----> 1 model.most_similar(some-rare-word)
1 frames
/usr/local/lib/python3.7/dist-packages/gensim/models/keyedvectors.py in word_vec(self, word, use_norm)
450 return result
451 else:
--> 452 raise KeyError("word '%s' not in vocabulary" % word)
453
454 def get_vector(self, word):
KeyError: "word some-rare-word not in vocabulary"
到目前为止我试过的是:
conceptnet-numberbatch-17-06-300 :不包含“玻璃”
word2vec-google-news-300 : Google Colab
内存不足
glove-twitter-200 :不包含“5”
crawl-300d-2M :不包含“waltons”
wiki-news-300d-1M :不包含“waltons”
glove-wiki-gigaword-300 :不包含“riget”
通过检查失败的单词,我发现即使是最大的库通常也会因为拼写错误的单词而失败,这些单词没有意义,例如 'riget'、'waltons'、...等
在尝试将这些奇怪的词注入 Gensim 并收到此错误之前,他们是否有一种方法可以对其进行分类和忽略?还是我对 Gensim 的使用非常错误,还有另一种使用方法?
任何代码片段或某种关于做什么的线索都将不胜感激
到目前为止我的代码:
import gensim.downloader as api
model = api.load("glove-wiki-gigaword-300") # this can be any vector-library of the previously mentioned ones
train_word_embeddings = []
# train_lemm is a vector of size (number of examples, number of words remaining in example sentence i after removal of stop words and lemmatization to nouns)
# they're mainly 25000 example review sentence while the second dimension is of random value depending on number of words
for i in range (len(train_lemm)):
train_word_embeddings.append(model.wv[train_lemm[i]])
如果您训练自己的词向量模型,那么它将包含您告诉它要学习的所有词的向量。如果训练数据中的某个词似乎没有向量,它可能没有出现所需的 min_count
次。 (这些模型往往 改进 如果你丢弃稀有的单词,很少的示例用法可能没有适当的信息,所以默认的 min_words=5
是个好主意。)
下游任务通常是合理的,例如使用文本和词向量集的特征工程,简单地忽略没有向量的词。也就是说,如果 some_rare_word in model.wv
是 False
,则不要尝试使用该词及其缺失的向量来表示任何内容。因此,您不一定需要查找或训练一组包含 每个 个单词的单词向量。只是省略,而不是担心,罕见的遗漏词。
单独观察:
- Stemming/lemmatization 和停用词删除并不总是值得麻烦,所有 corpora/algorithms/goals。 (而且,stemming/lemmatization 可能最终会创建伪词,限制模型的可解释性和对任何未经过相同预处理的文本的简单应用。)因此,如果这些是学习练习的必需部分,当然,请获得一些使用经验他们。但是不要假设他们一定有帮助,或者值得额外 time/complexity,除非你严格地验证这一点。
- FastText 模型还将能够根据子字符串为模型 不知道的单词提供合成向量。这些通常非常薄弱,但总比没有好——尤其是当它们给出拼写错误或罕见的感染形式的向量时,类似于形态相关的已知词。 (由于这种从许多类似编写的标记中推断出的相似性,通过不同的路径提供了与 stemming/lemmatization 相同的值, 需要 原始变体在初始阶段全部出现训练时,您尤其要注意 FastText 和 stemming/lemmatization 是否能很好地实现您的目标。)但要注意:对于非常短的未知词——模型没有学习到可重用的子字符串向量——FastText 可能仍然return 错误或全零向量。
- FastText 具有
supervised
分类模式,但 Gensim 不支持它。如果您想对此进行试验,则需要使用 Facebook FastText 实现。 (您仍然可以使用传统的非 supervised
FastText 词向量模型作为其他可能表示的特征贡献者。)
我目前正在尝试对 IMDB 评论数据集进行情感分析,作为我大学家庭作业的一部分,我需要首先进行一些预处理,例如:标记化,停用词去除,词干提取,词形还原。然后使用不同的方法将这些数据转换为向量以由不同的分类器进行分类,Gensim FastText 库是在我从文本预处理步骤获得的数据上获得词嵌入所需的模型之一。
我在使用 Gensim 时遇到的问题是,我首先尝试使用特征大小 (100,200,300) 的向量来训练我的数据,但它们总是在某些时候失败,后来我尝试使用许多预训练的 Gensim 数据向量,但是他们中的 none 努力寻找所有单词的词嵌入,他们宁愿在某个时候因错误
而失败---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-28-644253c70aa3> in <module>()
----> 1 model.most_similar(some-rare-word)
1 frames
/usr/local/lib/python3.7/dist-packages/gensim/models/keyedvectors.py in word_vec(self, word, use_norm)
450 return result
451 else:
--> 452 raise KeyError("word '%s' not in vocabulary" % word)
453
454 def get_vector(self, word):
KeyError: "word some-rare-word not in vocabulary"
到目前为止我试过的是:
conceptnet-numberbatch-17-06-300 :不包含“玻璃”
word2vec-google-news-300 : Google Colab
内存不足
glove-twitter-200 :不包含“5”
crawl-300d-2M :不包含“waltons”
wiki-news-300d-1M :不包含“waltons”
glove-wiki-gigaword-300 :不包含“riget”
通过检查失败的单词,我发现即使是最大的库通常也会因为拼写错误的单词而失败,这些单词没有意义,例如 'riget'、'waltons'、...等
在尝试将这些奇怪的词注入 Gensim 并收到此错误之前,他们是否有一种方法可以对其进行分类和忽略?还是我对 Gensim 的使用非常错误,还有另一种使用方法?
任何代码片段或某种关于做什么的线索都将不胜感激
到目前为止我的代码:
import gensim.downloader as api
model = api.load("glove-wiki-gigaword-300") # this can be any vector-library of the previously mentioned ones
train_word_embeddings = []
# train_lemm is a vector of size (number of examples, number of words remaining in example sentence i after removal of stop words and lemmatization to nouns)
# they're mainly 25000 example review sentence while the second dimension is of random value depending on number of words
for i in range (len(train_lemm)):
train_word_embeddings.append(model.wv[train_lemm[i]])
如果您训练自己的词向量模型,那么它将包含您告诉它要学习的所有词的向量。如果训练数据中的某个词似乎没有向量,它可能没有出现所需的 min_count
次。 (这些模型往往 改进 如果你丢弃稀有的单词,很少的示例用法可能没有适当的信息,所以默认的 min_words=5
是个好主意。)
下游任务通常是合理的,例如使用文本和词向量集的特征工程,简单地忽略没有向量的词。也就是说,如果 some_rare_word in model.wv
是 False
,则不要尝试使用该词及其缺失的向量来表示任何内容。因此,您不一定需要查找或训练一组包含 每个 个单词的单词向量。只是省略,而不是担心,罕见的遗漏词。
单独观察:
- Stemming/lemmatization 和停用词删除并不总是值得麻烦,所有 corpora/algorithms/goals。 (而且,stemming/lemmatization 可能最终会创建伪词,限制模型的可解释性和对任何未经过相同预处理的文本的简单应用。)因此,如果这些是学习练习的必需部分,当然,请获得一些使用经验他们。但是不要假设他们一定有帮助,或者值得额外 time/complexity,除非你严格地验证这一点。
- FastText 模型还将能够根据子字符串为模型 不知道的单词提供合成向量。这些通常非常薄弱,但总比没有好——尤其是当它们给出拼写错误或罕见的感染形式的向量时,类似于形态相关的已知词。 (由于这种从许多类似编写的标记中推断出的相似性,通过不同的路径提供了与 stemming/lemmatization 相同的值, 需要 原始变体在初始阶段全部出现训练时,您尤其要注意 FastText 和 stemming/lemmatization 是否能很好地实现您的目标。)但要注意:对于非常短的未知词——模型没有学习到可重用的子字符串向量——FastText 可能仍然return 错误或全零向量。
- FastText 具有
supervised
分类模式,但 Gensim 不支持它。如果您想对此进行试验,则需要使用 Facebook FastText 实现。 (您仍然可以使用传统的非supervised
FastText 词向量模型作为其他可能表示的特征贡献者。)