代码之家  ›  专栏  ›  技术社区  ›  error_unknown

h2o聚合法“无”将未知词映射到NAN而不是向量

  •  0
  • error_unknown  · 技术社区  · 8 年前

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

    目前,我将使用原始的标记化列表为原始的double-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)
    

    1 回复  |  直到 8 年前
        1
  •  0
  •   Lauren    8 年前

    不幸的是,区分字典中缺少的单词和用于划分记录开始和结束的NAs的功能目前不可用。我做了一张吉拉的票 here 以跟踪问题。请随时评论或更新机票。

    推荐文章