Python h2o骨料法“;无”;将未知单词映射到NAN而不是向量

Python h2o骨料法“;无”;将未知单词映射到NAN而不是向量,python,word2vec,h2o,Python,Word2vec,H2o,我目前正在使用h2o.ai执行一些NLP。我用Word2Vec为我的语料库建立了一个经过训练的模型,并用“平均”方法成功地聚合了大量记录。当我想通过使用这个w2v模型为我的DRF模型创建功能,为每个条目创建一包单词时,问题就出现了。当我使用聚合方法“none”时,向量在包含记录开始和结束的NaN的单个列中返回,但是模型中的未知词也映射到NaN,而不是未知词向量。这阻止了我为每条记录将向量重新组织成一个单词包,因为记录分离关联由于额外的、不可预测的输入NAN而丢失。有解决办法吗 我现在将使用原始的

我目前正在使用h2o.ai执行一些NLP。我用Word2Vec为我的语料库建立了一个经过训练的模型,并用“平均”方法成功地聚合了大量记录。当我想通过使用这个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)
DATA=pd.read\u sql(sql,conn1)
步骤=[
(r'[\n\t\'\-“\!`\'@\\$%\^\&\*()\+\\\\\\\\\\\\\\\\\\:\?\-=\[\]\\\\\\',./\d],''),
(r'\s+','')
]
步骤=[(在步骤中重新编译(a),b)中的(a,b)]
def do_步骤(anarr):
对于图案,分步骤更换:
anarr=pattern.sub(替换,anarr)
返回anarr
DATA.NARR=DATA.NARR.apply(执行步骤)
train_hdata=h2o.H2OFrame(数据).ascharacter()
火车头=火车头数据[“火车头”]
列车钥匙=列车hdata[“钥匙”]
列车令牌=列车令牌化(拆分=“”)
train\u vecs=w2v.transform(train\u tokens\u narr,aggregate\u method='NONE')
VECS=列车作为数据帧()
df=训练令牌作为数据帧()
B=(VECS.isnull()&df.isnull())
idx=B[B['C1']==True].index.tolist()
X=[]
附加(“”)
j=0
对于tqdm中的i(范围(len(向量C1)-1)):
如果我在idx中:
X[j]=X[j][:-2]
j+=1
附加(“”)
其他:
X[j]=X[j]+str(向量C1[i])[:6]+','
s=pd.DataFrame({“C1”:X})
印刷品

上面是当前代码,希望获取一些记录,并使用word2vec模型对它们进行编码,以获得一包单词。底部是一个草稿循环,我正在使用它将正确的向量与正确的记录放在一起。如果需要澄清,请告诉我。

不幸的是,该功能无法区分缺少的单词您用于划分记录开始和结束的词典和NAs当前不可用。我已制作了一张jira记录单来跟踪此问题。请随时评论或更新记录单。

考虑阅读本文并编辑您的问题。您能否发布一个带有端到端示例的代码片段,以便我们了解您使用的语言我正在使用Python和h2o v3.18.0.11对我的代码进行了一些修改,以便将其更新到当前的工作版本。但是它的速度非常慢。谢谢!这是我一直在寻找的。