首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过word2vec API在web应用程序中正确地加载和使用RESTful模型?

如何通过word2vec API在web应用程序中正确地加载和使用RESTful模型?
EN

Stack Overflow用户
提问于 2020-12-13 16:53:10
回答 1查看 426关注 0票数 0

我构建了一个小代码来使用word2vec查找类比,它作为独立的应用程序运行得很好。这是工作代码

代码语言:javascript
运行
复制
import numpy as np

# Get the interactive Tools for Matplotlib
%matplotlib notebook


from gensim.test.utils import datapath, get_tmpfile
from gensim.models import KeyedVectors
from gensim.scripts.glove2word2vec import glove2word2vec
import os
glove_file = os.path.abspath('glove.6B/glove.6B.100d.txt')
word2vec_glove_file = get_tmpfile("glove.6B.100d.word2vec.txt")
glove2word2vec(glove_file, word2vec_glove_file)
model = KeyedVectors.load_word2vec_format(word2vec_glove_file)
def analogy(x1, x2, y1):
    result = model.most_similar(positive=[y1, x2], negative=[x1])
    return result[0][0]
analogy('woman', 'queen', 'man')    

现在,我计划使用烧瓶来创建一个小型的web应用程序,这样用户就可以通过网页找到相似之处。为此,我有一个基本的问题

  1. 我假设我需要保存模型,然后在启动服务器时加载它。请纠正我我错了。--

这是使用瓶的代码,它正在工作,但请您建议是否需要保存模型在这里? 2。任何建议,以改善这段代码是欢迎的!

代码语言:javascript
运行
复制
import numpy as np



from gensim.test.utils import datapath, get_tmpfile
from gensim.models import KeyedVectors
from gensim.scripts.glove2word2vec import glove2word2vec
import os 

from flask import Flask, request


app = Flask(__name__)
@app.route("/", methods=['GET'])
def welcome():
    return "Welcome to our Machine Learning REST API!"
@app.route("/analogy", methods=['GET'])
def analogy_route():
    word1 = request.args.get("word1")
    word2 = request.args.get("word2")
    word3 = request.args.get("word3")
    result = model.most_similar(positive=[word3, word2], negative=[word1])
    return str(result[0][0])
if __name__ == "__main__":
    glove_file = os.path.abspath('glove.6B/glove.6B.100d.txt')
    word2vec_glove_file = get_tmpfile("glove.6B.100d.word2vec.txt")
    glove2word2vec(glove_file, word2vec_glove_file)

    model = KeyedVectors.load_word2vec_format(word2vec_glove_file)
    app.run(host='0.0.0.0', port=5000, debug=True)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-15 17:28:48

您可能不想在每次启动服务时将手套到word2vec格式转换为临时文件。(这可能需要相当长的时间,并且可能正在用相同数据的冗余副本填充临时目录。)

相反,只执行一次转换,转换为非临时位置。然后,完全忽略原始的glove.6B.100d.txt文件--不再需要它了。相反,只需确保您的web服务可以在一个稳定的位置上使用转换的文件。

粗略地说,这意味着:

  1. 在任何地方运行一次:

代码语言:javascript
运行
复制
glove2word2vec('glove.6B/glove.6B.100d.txt', `glove.6B.100d.word2vec.txt`)

(请注意,absfile()get_tmpfile()的使用都不是绝对必要的--您可以直接向glove2word2vec()函数提供字符串路径。)

  1. 确保新文件glove.6B.100d.word2vec.txt在web服务的工作目录中可用。

  1. 让您的web服务的__main__分支只加载已转换的文件,避免重复的冗余转换工作:

代码语言:javascript
运行
复制
if __name__ == "__main__":
    model = KeyedVectors.load_word2vec_format('glove.6B.100d.word2vec.txt')
    app.run(host='0.0.0.0', port=5000, debug=True)

(根据选择放置完整文件的位置,'glove.6B.100d.word2vec.txt'的确切路径可能略有不同。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65278189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档