#python #nlp #sentiment-analysis #fastapi #bert-language-model
#python #nlp #анализ настроений #fastapi #bert-language-model
Вопрос:
У меня есть модель анализа настроений с использованием BERT, и я хочу получить результат от прогнозирования текста с помощью FastAPI, но он всегда дает отрицательный ответ (я думаю, это потому, что прогноз не дал результата прогнозирования).
Это мой код:
import uvicorn
from fastapi import FastAPI
import joblib
# models
sentiment_model = open("sentiment-analysis-model.pkl", "rb")
sentiment_clf = joblib.load(sentiment_model)
# init app
app = FastAPI()
# Routes
@app.get('/')
async def index():
return {"text": "Hello World! huehue"}
@app.get('/predict/{text}')
async def predict(text):
prediction, raw_outputs = sentiment_clf.predict(text)
if prediction == 0:
result = "neutral"
elif prediction == 1:
result = "positive"
else:
result = "negative"
return{"text": text, "prediction":result}
if __name__ == '__main__':
uvicorn.run(app, host="127.0.0.1", port=8000)
Также я хочу напечатать точность, оценку F1 и т. Д.
Я использую эту модель
from simpletransformers.classification import ClassificationModel
model = ClassificationModel('bert', 'bert-base-multilingual-uncased', num_labels=3, use_cuda=False,
args={'reprocess_input_data': True, 'overwrite_output_dir': True, 'num_train_epochs': 1},
weight=[3, 0.5, 1])
Комментарии:
1. Вы пытались дебютировать с этим? Либо с некоторой печатью / протоколированием, либо с точкой останова? Правильно ли вы называете модель? Работает ли он так, как ожидалось, прежде чем подключать его сюда? И как вы вызываете API?
Ответ №1:
Вы используете конструкцию параметра пути. Это означает, что для вызова конечной точки вашего API вам нужно выполнить такой вызов: http://localhost:8000/predict/some_text
. Проблема в том, что some_text
в вашем случае содержит пробелы. Если не использовать явный HTML-код, например
(я не уверен, что это вообще сработает), не удастся зарегистрировать пробел, и у вас будет только первое слово.
Вместо этого вам было бы лучше использовать конструкцию тела запроса. Итак, POST вместо GET . Что-то вроде этого:
from pydantic import BaseModel
class Text(BaseModel):
text: str
app = FastAPI()
@app.post("/predict/")
async def predict(text: Text):
text = text.text
...