h2o 聚合方法 "none" 将未知词映射到 NAN 而不是向量

h2o aggregate method "none" mapping unknown words to NAN and not vector

我目前正在使用 h2o.ai 来执行一些 NLP。我在 Word2Vec 中为我的语料库训练了一个模型,并使用方法 "Average" 成功地聚合了许多记录。当我想通过使用这个 w2v 模型为每个条目创建一个词袋来为我的 DRF 模型创建特征时,问题就来了。当我使用聚合方法 "none" 时,向量在包含 NaN 的单个列中返回,其中记录开始和结束,但是模型中的未知词也被映射到 NaN 而不是未知词向量。这阻止了我将向量重新组织到每个记录的词袋中,因为由于额外的和不可预测的输入 NaN,记录分离关联丢失了。有解决办法吗?

我目前打算使用原始标记化列表为原始双 NaN 结构创建索引,该结构用于在记录之间进行分隔,然后基于此重新组合我的向量。只是想把它扔出去看看是否有其他人正在处理这个问题,或者是否有某种我在互联网上找不到的修复方法。

DATA = pd.read_sql(sql, conn1)

steps = [
    (r'[\n\t\’\–\”\“\!~`\"@#$%\^\&\*()_+\{\}|:<>\?\-=\[\]\;\',./\d]', ' '), 

    (r'\s+', ' ')
    ]

steps = [ (re.compile(a), b) for (a, b) in steps ] 

def do_steps(anarr):
    for pattern,replacement in steps:
        anarr = pattern.sub(replacement,anarr)
    return anarr

DATA.NARR = DATA.NARR.apply(do_steps)

train_hdata = h2o.H2OFrame(DATA).ascharacter()
train_narr = train_hdata["NARR"]
train_key = train_hdata["KEY"]
train_tokens_narr = train_narr.tokenize(split=' ')

train_vecs = w2v.transform(train_tokens_narr, aggregate_method='NONE')
VECS = train_vecs.as_data_frame()
df = train_tokens_narr.as_data_frame()
B=(VECS.isnull()&df.isnull())
idx = B[B['C1'] == True].index.tolist()
X = []
X.append('')
j=0
for i in tqdm(range(len(VECS.C1)-1)):
    if i in idx:
        X[j]= X[j][:-2]
        j+=1
        X.append('')
    else:
        X[j]= X[j] + str(VECS.C1[i])[:6] + ', '

s = pd.DataFrame({"C1":X})
print(s)

以上是当前的代码,希望获取一些记录并使用 word2vec 模型对它们进行编码以获得一袋词。底部是一个草图循环,我用它来将正确的向量与正确的记录放在一起。让我知道是否需要澄清。

遗憾的是,区分字典中缺失的单词和用于划分记录开头和结尾的 NA 的功能当前不可用。我制作了一张 jira ticket here 来跟踪这个问题。请随时发表评论或更新票证。