摩尔投票法 海思 windows postgresql download scope compilation vue学习 vue双向绑定 matlab中log函数 python与机器学习 spark数据清洗 mysql自连接 pcie高速固态硬盘 matlab网页版 python3下载安装 python关键字 python怎么调用函数 python变量定义 python函数的调用 python编程工具 java操作mysql java正则表达式详解 java获取本机ip java截取 java列表 java线程停止 linux教程 ip隐藏 枪神传说辅助 微信摇骰子表情包 tt语音官网 小米手环充电多久 js给标签添加属性 拍照姿势的摆法女 凯立德下载 ipad清理内存 cad拉伸命令 远程桌面管理工具 联发科p22
当前位置: 首页 > 学习教程  > 编程学习

word2vec训练中文语料

2021/1/9 1:56:40 文章标签: word计算

最近在做一个问答系统,看了很多论文,主要学习作者是如何进行做问答的,大都是这个过程: 1、构建语料库; 2、训练词向量; 3、问题间和问答间的相似度对比; 4、在线搜索答案。 5、信息抽取&#xf…

最近在做一个问答系统,看了很多论文,主要学习作者是如何进行做问答的,大都是这个过程:
1、构建语料库;
2、训练词向量;
3、问题间和问答间的相似度对比;
4、在线搜索答案。
5、信息抽取;
6、生成答案。
网上大都是对wiki百科开源的中文语料进行训练的,很多作者都会对自己构建的语料进行向量模型计算,因此,我也需要进行训练,可供选择的两种算法一种是word2vec算法,一种是Glove算法,但是现在Glove算法还不能在windows系统上进行训练,因此,只能选择word2vec算法进行模型训练了。下面是训练自己中文语料步骤。
1、对语料进行分词、去除停用词
很明显,这两步对训练模型很重要,能提升很大的准确率,不多说,直接贴代码

def main():
       logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
       #以下是停用词,大家可以根据自己对停用词和具体的需求进行设置
      stopword_set = ['的','得','地',',','。','?',':',';','、','!','@','#','¥','%','&'
          , '*','(',')','-','=','+','[',']','{','}','1','2','3','4','5','6','7','8','9','0','~','`','$'
          , '<','>','/','是']
      #output接收处理好的文件
      output = open('../resource/wiki_text.txt','w',encoding='utf-8')
      #打开语料文本
      with open('C:/Users\Administrator\Desktop/wikizh.txt','r',encoding='utf-8') as f:
          for texts_num,line in enumerate(f):
              line = line.strip('\n')
              words = jieba.cut(line,cut_all=False)
              for word in words:
                  if word not in stopword_set:
                      output.write(word + ' ')
              output.write('\n')
              if(texts_num + 1) % 10000 == 0:
                  logging.info('已完成前%d行的分词'%(texts_num + 1))
      output.close()

2、对语料进行训练
网上有很多公开讲word2vec的使用方法的,在此,默认大家已经对算法有了基础的了解,如果实在不了解,可以联系我,我会进行讲解。代码如下:

if __name__ == '__main__':
    program = os.path.basename(sys.argv[0])
    logger = logging.getLogger(program)

    logging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s')
    logging.root.setLevel(level=logging.INFO)
    logger.info("running %s" % ' '.join(sys.argv))

    # check and process input arguments
    if len(sys.argv) < 4:
        print(globals()['__doc__'] % locals())
        sys.exit(1)
    inp, outp1, outp2 = sys.argv[1:4]

    model = Word2Vec(LineSentence(inp), size=400, window=5, min_count=5,
                     workers=multiprocessing.cpu_count())

    # trim unneeded model memory = use(much) less RAM
    # model.init_sims(replace=True)
    model.save(outp1)
    model.wv.save_word2vec_format(outp2, binary=False)

python ***.py 训练语料路径 训练模型名称.model(以.model结尾) 训练词向量名称.vector(以.vevtor结尾)
以上的代码是使用word2vec训练自己的语料,但是如果想区得更好的效果,需要对算法进行深一步的改进,大家可以试试,如果能取得更好的效果,那么对接下来的问答效果也会产生很大的影响。
(1)、如果您在阅读博客时遇到问题或者不理解的地方,可以联系我,互相交流、互相进步;
(2)、本人业余时间可以承接毕业设计和各种小项目,如系统构建、成立网站、数据挖掘、机器学习、深度学习等。有需要的加QQ:1143948594,备注“csdn项目”。


本文链接: http://www.dtmao.cc/news_show_1100118.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?