카테고리 없음
[tensorflow 2] Text embedding API를 만들어 보자 2
닉의네임
2022. 1. 19. 15:56
반응형
flask_restx 로도 만들수 있네.. 하지만.. 있는걸 수정
후딱 POST 만 만들어 보자
뭐지 2000 ms 나오길래 망했다고 생각했는데 다시 해보니 40 ms 대로 나옴
일단 만들면 ..
app.py
# import tensorflow as tf
import tensorflow_hub as hub
import tensorflow_text
import kss, numpy
import json
from flask import Flask, request
from flask_restful import reqparse, abort, Api, Resource
app = Flask(__name__)
api = Api(app)
def getTextVectors(input):
vectors = module(input)
return [vector.numpy().tolist() for vector in vectors]
#
class NumpyEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, numpy.ndarray):
return obj.tolist()
return json.JSONEncoder.default(self, obj)
class Vector(Resource):
def post(self):
try:
parser = reqparse.RequestParser()
parser.add_argument('keyword', type=str)
args = parser.parse_args()
_keyword = args['keyword']
return {'vectors': json.dumps(getTextVectors(_keyword)[0], cls=NumpyEncoder)}
except Exception as e:
return {'error': str(e)}
api.add_resource(Vector, '/vectors')
if __name__ == '__main__':
module = hub.load("https://tfhub.dev/google/universal-sentence-encoder-multilingual-large/3")
app.run(debug=True)
flask_restx 로 만드는 예제
from flask import Flask, request
from flask_restx import Resource, Api
app = Flask(__name__)
api = Api(app)
todos = {}
count = 1
@api.route('/todos')
class TodoPost(Resource):
def post(self):
global count
global todos
idx = count
count += 1
todos[idx] = request.json.get('data')
return {
'todo_id': idx,
'data': todos[idx]
}
@api.route('/todos/<int:todo_id>')
class TodoSimple(Resource):
def get(self, todo_id):
return {
'todo_id': todo_id,
'data': todos[todo_id]
}
def put(self, todo_id):
todos[todo_id] = request.json.get('data')
return {
'todo_id': todo_id,
'data': todos[todo_id]
}
def delete(self, todo_id):
del todos[todo_id]
return {
"delete" : "success"
}
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=80)
반응형