使用Word2Vec模型提取数据



我使用gensim Word2Vec学习在银行交易备忘录中嵌入货币金额和其他数字数据。我们的目标是从未来的输入字符串中提取这些金额和货币。

我们的输入字符串类似于

"AMAZON.COM TXNw98e7r3347 USD 49.00 @ 1.283"

在预处理期间,我用一个特殊的VALUE_TOKEN标记并替换所有可能是货币数量(仅由数字、逗号和<= 1小数点/周期组成的字符串)的标记。我还用RATE_TOKEN手动替换汇率。结果将是

["AMAZON", ".COM", "TXNw", "98", "e", "7", "r", "3347", "USD", "VALUE_TOKEN", "@", "RATE_TOKEN"]

使用列表data中所有预处理的字符串列表,我生成模型

model = Word2Vec(data, window=3, min_count=3)

我最感兴趣的模型嵌入是VALUE_TOKEN, RATE_TOKEN,以及任何货币(美元,欧元,加元等)。现在我已经生成了模型,我不确定该如何处理它。

假设我有一个模型从未见过的新字符串

new_string = "EUR 299.99 RATE 1.3289 WITH FEE 5.00"

我想使用model来识别new_string的哪些令牌在上下文上最类似于VALUE_TOKEN(它应该返回["299.99", "5.00"]),这最接近RATE_TOKEN ("1.3289")。它应该能够基于学习嵌入对这些进行分类。我可以用处理训练数据的方式预处理new_string,但是因为我事先不知道汇率,所以["299.99", "5.00", " 1.389 "]的所有三个令牌都将被标记为相同的(使用VALUE_TOKEN或新的UNIDENTIFIED_TOKEN)。

我已经研究了most_similarsimilarity这样的方法,但不认为它们适用于不一定在词汇表中的标记。我应该使用什么方法来做到这一点?这是正确的方法吗?

Word2vec模糊,密度嵌入标记表示别打击我当作正确的工具,你在做什么,尽管他们可能是一个混合的方式间接因素。

特别是:

  • word2vec算法起源于,&当应用于自然语言文本时,具有最一致的公开结果,具有相对标记频率的特定模式,以及不同的共现。当然,许多人已经成功地将其应用于其他类型的文本/记录数据,但这种用途可能需要更多的预处理/参数调优,并且在某种程度上,底层数据具有一些固定的,高度重复的方案,可能更适合其他方法。
  • 如果用'VALUE_TOKEN', &代替所有已知的'RATE_TOKEN'的所有已知速率,那么模型只会学习'VALUE_TOKEN'的标记向量;'RATE_TOKEN'。这样的模型将无法为'$1.2345''299.99'等从未见过的非替换令牌提供任何向量。即使将所有这些折叠到'UNIDENTIFIED_TOKEN',也只会将模型限制为之前学习到的'UNIDENTIFIED_TOKEN'向量(如果有的话,在训练数据中)。
  • 我没有注意到现有word2vec实现提供一个接口,用于推断新unknown-vectors word-vector,从一个或几个新的外观语境的例子。它们可以,在'段落向量'/Doc2Vec使用的相同样式的new-document-vector推断中,但只是没有。)我见过的最接近的是Gensim的predict_output_word(),它在负采样模型上对每个"输出节点"(每个已知单词一个)进行类似cbow的前向传播,给出给定一些上下文单词最有可能出现的已知单词的排名列表。

predict_output_word()可能,如果提供周围的已知令牌,它是否表明您的'VALUE_TOKEN''RATE_TOKEN'是更可能的模型预测,从而有助于满足您的需求。如果您总是确定正确的答案是其中之一,那么您可以将其代码调整为仅评估这两个候选项,以提高速度。对上下文词向量的平均值和候选答案向量进行简单的比较,可能与完全的前向传播一样有效。

或者,您可能希望将word2vec模型单独用作某些其他分类器的特征源(通过上下文词),这些分类器被训练以回答VALUETOKEN。这个分类器的输入可能包括如下内容:

  • 所有附近令牌向量的平均值
  • 最近邻的完整向量
  • 假设非数字标记的词汇表相当短,则所有附近(或"前面"或"后面")已知标记的单热编码('bag-of-words') &高度象征
  • ?

如果数据流可能包含任意新的或损坏的令牌,其含义可以从子字符串中推断出来,那么您也可以考虑使用FastText模型。

最新更新