You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Word2Vec模型提取交易文本数值信息的方法咨询

问题背景

我已使用gensim库的Word2Vec训练银行交易备注中货币金额及其他数值数据的词嵌入,目标是实现从后续输入字符串中提取对应金额与货币类型信息。

现有方案设计

模型输入字符串样例如下:

"AMAZON.COM TXNw98e7r3347 USD 49.00 @ 1.283"

预处理环节首先完成分词,随后执行两类替换:

  • 将所有符合货币金额规则的token(仅由数字、逗号组成,且至多包含1个小数点的字符串)统一替换为特殊标记VALUE_TOKEN
  • 手动将汇率数值替换为RATE_TOKEN

预处理后的分词结果样例为:

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

将所有预处理完成的字符串列表存入变量data后,通过如下代码训练模型:

from gensim.models import Word2Vec
model = Word2Vec(data, window=3, min_count=3)

当前重点关注模型中VALUE_TOKEN、RATE_TOKEN以及各类货币标识(USD、EUR、CAD等)的嵌入向量,但模型训练完成后暂不明确后续落地应用的方法。

待解决问题

假设有一条模型训练阶段从未见过的新输入字符串,样例如下:

new_string = "EUR 299.99 RATE 1.3289 WITH FEE 5.00"

需求是使用训练好的model完成两类识别:

  • 识别新字符串中与VALUE_TOKEN上下文相似度最高的token(预期返回结果为["299.99", "5.00"])
  • 识别与RATE_TOKEN最接近的token(预期返回结果为"1.3289")

即基于模型学习到的嵌入表示完成数值类token的分类。
目前可以按照训练数据的预处理逻辑处理新字符串,但存在核心矛盾:由于无法提前识别哪个数值是汇率,["299.99", "5.00", "1.3289"]三类数值token会被标记为同一类(要么标记为VALUE_TOKEN,要么标记为新的UNIDENTIFIED_TOKEN)。
已调研过most_similar、similarity等内置方法,但这类方法无法适配不一定存在于词表中的token,现咨询两个核心问题:

  1. 应采用什么方法实现上述需求
  2. 当前的技术实现思路是否合理

回答

你的思路有基础合理性,但存在两个核心设计缺陷,调整后可直接落地,不需要引入额外复杂模型。

现有思路的核心问题

你当前预处理逻辑把所有金额类数值全替换成了VALUE_TOKEN,等于模型从来没在对应语义位置见过具体数值token的上下文——所有数值位置都被占位符填充,模型根本学不到「不同上下文对应的数值类型差异」,这也是most_similar类方法失效的根本原因:待识别的数值token要么不在词表中,要么嵌入是无意义的随机值,根本没法直接比对相似度。

可落地的实现方案

分三步调整,完全基于你现有的Word2Vec模型就能实现需求:

  1. 调整训练阶段的预处理逻辑
    不要把所有数值都替换成占位符,改用半替换策略:训练时随机保留30%左右的原始数值token不替换,剩下70%替换为对应占位符(交易金额位置换VALUE_TOKEN,汇率位置换RATE_TOKEN)。这个逻辑和Word2Vec原生的负采样、子采样逻辑兼容,目的是让模型同时学到占位符的通用语义,以及「数值token出现在某类上下文时对应某类标签」的特征。注意货币代码(USD/EUR/CAD这类)全程不要替换,保留原始token,它们是判断上下文类别的核心特征。
  2. 推理阶段计算上下文向量
    处理新字符串时,不要提前把数值替换成统一占位符,先正常分词,把所有符合数值规则的token单独拎出来作为待分类候选。
    对每个候选数值token,取它窗口范围内(和训练参数保持一致,即前后各3个token)所有存在于词表中的非数值token,将这些token的嵌入求平均,得到该候选位置的上下文嵌入向量。同时直接从训练好的模型里取出VALUE_TOKEN和RATE_TOKEN的嵌入向量,作为两个类别的锚点向量。
  3. 相似度匹配完成分类
    计算每个候选位置的上下文嵌入和两个类别锚点向量的余弦相似度:
    • 和VALUE_TOKEN锚点相似度更高的,判定为交易金额
    • 和RATE_TOKEN锚点相似度更高的,判定为汇率
      你给出的样例中,1.3289的前一个token是RATE,和训练时RATE_TOKEN的典型上下文(前接@/RATE类标识,后无其他数值)高度匹配,自然会被分到汇率类;299.99前接货币代码EUR,5.00前接FEE,都是训练时VALUE_TOKEN的典型上下文,会被分到金额类,完全符合预期。

补充优化点

  • 准确率调优不需要换大模型,只要把训练时的原始数值保留比例调到20%-40%区间,保证两类占位符的上下文特征被充分学习即可
  • 计算上下文向量时,直接跳过不在词表里的罕见token即可,不影响整体匹配效果——核心判定特征永远是高频的上下文标识(货币代码、@、RATE、FEE这类)
  • 不要尝试给未见的数值token单独训练嵌入,数值本身的字面量和语义无关,类别的判断核心永远是上下文,和数值大小没有关系

内容的提问来源于stack exchange,提问作者esljkfgh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:45:45