Browse Source

nlp接口

罗俊辉 10 months ago
parent
commit
efb58fbf61
4 changed files with 68 additions and 13 deletions
  1. 1 1
      alg.toml
  2. 33 8
      applications/textSimilarity.py
  3. 1 2
      routes/__init__.py
  4. 33 2
      test/nlp_dev.py

+ 1 - 1
alg.toml

@@ -1,6 +1,6 @@
 reload = true
 bind = "0.0.0.0:6060"
-workers = 1
+workers = 4
 keep_alive_timeout = 120  # 保持连接的最大秒数,根据需要调整
 graceful_timeout = 30    # 重启或停止之前等待当前工作完成的时间
 loglevel = "debug"  # 日志级别

+ 33 - 8
applications/textSimilarity.py

@@ -36,7 +36,10 @@ class NLPFunction(object):
             text_dict['text_a'],
             text_dict['text_b']
         )
-        return score_tensor.squeeze().tolist()
+        response = {
+            "score": score_tensor.squeeze().tolist()
+        }
+        return response
 
     def base_list_similarity(self, pair_list_dict):
         """
@@ -47,7 +50,10 @@ class NLPFunction(object):
             pair_list_dict['text_list_a'],
             pair_list_dict['text_list_b']
         )
-        return score_tensor.tolist()
+        response = {
+            "score_list_list": score_tensor.tolist()
+        }
+        return response
 
     def max_cross_similarity(self, data):
         """
@@ -57,25 +63,36 @@ class NLPFunction(object):
         """
         score_list_max = []
         text_list_max = []
-        score_array = self.base_list_similarity(data)
+        score_array = self.base_list_similarity(data)['score_list_list']
         text_list_a, text_list_b = data['text_list_a'], data['text_list_b']
         for i, row in enumerate(score_array):
             max_index = np.argmax(row)
             max_value = row[max_index]
             score_list_max.append(max_value)
             text_list_max.append(text_list_b[max_index])
-        return score_list_max, text_list_max, score_array
+        response = {
+            'score_list_max': score_list_max,
+            'text_list_max': text_list_max,
+            'score_list_list': score_array,
+        }
+        return response
 
     def mean_cross_similarity(self, data):
         """
         :param data:
         :return:
         """
-        score_list_max, text_list_max, score_array = self.max_cross_similarity(data)
+        resp = self.max_cross_similarity(data)
+        score_list_max, text_list_max, score_array = resp['score_list_max'], resp['text_list_max'], resp['score_list_list']
         score_tensor = torch.tensor(score_array)
         score_res = torch.mean(score_tensor, dim=1)
         score_list = score_res.tolist()
-        return score_list, text_list_max, score_array
+        response = {
+            'score_list_mean': score_list,
+            'text_list_max': text_list_max,
+            'score_list_list': score_array,
+        }
+        return response
 
     def avg_cross_similarity(self, data):
         """
@@ -84,9 +101,17 @@ class NLPFunction(object):
         """
         score_list_b = data['score_list_b']
         symbol = data['symbol']
-        score_list_max, text_list_max, score_array = self.max_cross_similarity(data)
+        # score_list_max, text_list_max, score_array = self.max_cross_similarity(data)
+        resp = self.max_cross_similarity(data)
+        score_list_max, text_list_max, score_array = resp['score_list_max'], resp['text_list_max'], resp[
+            'score_list_list']
         score_attn, score_norm, score_pred = score_to_attention(score_list_b, symbol=symbol)
         score_tensor = torch.tensor(score_array)
         score_res = torch.matmul(score_tensor, score_attn.transpose(0, 1))
         score_list = score_res.squeeze(-1).tolist()
-        return score_list, text_list_max, score_array
+        response = {
+            'score_list_avg': score_list,
+            'text_list_max': text_list_max,
+            'score_list_list': score_array,
+        }
+        return response

+ 1 - 2
routes/__init__.py

@@ -44,8 +44,7 @@ def AlgRoutes(mysql_client, model):
         """
         params = await request.get_json()
         nlpS = NLPServer(params=params, model=model)
-        result = nlpS.deal()
-        response = {"result": result}
+        response = nlpS.deal()
         return jsonify(response)
 
     return blueprint

+ 33 - 2
test/nlp_dev.py

@@ -7,7 +7,12 @@ import time
 
 url = "http://localhost:6060/nlp"
 
-body = {
+list_data = {
+    "text_list_a": ["凯旋", "毛泽东", "周恩来"],
+    "text_list_b": ["胜利", "毛主席", "周总理"]
+}
+
+body1 = {
     "data": {
         "text_a": "毛主席",
         "text_b": "毛泽东"
@@ -15,10 +20,36 @@ body = {
     "function": "similarities"
 }
 
+
+body2 = {
+    "data": list_data,
+    "function": "similarities_cross"
+}
+
+body3 = {
+    "data": list_data,
+    "function": "similarities_cross_max"
+}
+
+body4 = {
+    "data": {
+                    "text_list_a": ["牛逼", "毛泽东", "王一博"],
+                    "text_list_b": ["肖战", "邓小平", "绝了", "蒋介石"],
+                    "score_list_b": [100, 1000, 500, 40],
+                    "symbol": 1,
+                },
+    "function": "similarities_cross_avg"
+}
+
+body5 = {
+    "data": list_data,
+    "function": "similarities_cross_mean"
+}
+
 headers = {"Content-Type": "application/json"}
 
 a = time.time()
-response = requests.post(url=url, headers=headers, json=body)
+response = requests.post(url=url, headers=headers, json=body4)
 b = time.time()
 print(json.dumps(response.json(), ensure_ascii=False, indent=4))
 print(b - a)