반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

[tensorflow 2] Text embedding API를 만들어 보자 2 본문

카테고리 없음

[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)
반응형
Comments