mengqli commited on
Commit
ef2b23b
1 Parent(s): 1054c67

add the app file and log_in option

Browse files
Files changed (2) hide show
  1. app.py +92 -0
  2. requirements.txt +8 -0
app.py ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+ import nltk
4
+ import random
5
+ from bs4 import BeautifulSoup
6
+ from sklearn.metrics.pairwise import cosine_similarity
7
+ import numpy as np
8
+ import spacy
9
+ from numpy.linalg import norm
10
+ from sentence_transformers import SentenceTransformer, util
11
+
12
+ # nltk.download('punkt')
13
+ # nltk.download('wordnet')
14
+ # nltk.download('omw-1.4')
15
+
16
+ threshold = 0.65
17
+ sentence_length = 6
18
+ questions = [
19
+ "Is it new or used", "Are there any wear & tear", "Does it come with dust bag, receipt & original box",
20
+ "Are there any scratches, marks", "Are there any fading, stains, discolorization",
21
+ "Is this item customized, repainted or has hardware been replaced", "Is it special edition", "Is there any odour",
22
+ "Are there multiple items or extra add-ons in this listing?",
23
+ "Is there a date code or serial number present on the item?"
24
+ ]
25
+
26
+ model = SentenceTransformer("all-MiniLM-L6-v2")
27
+
28
+
29
+ def generate_phrases(desc: str, length: int):
30
+ desc_list = desc.split()
31
+ phrase_list = []
32
+ if len(desc_list) >= length:
33
+ for i in range(len(desc_list) - (length - 1)):
34
+ sub_list = []
35
+ for j in range(i, i + length):
36
+ sub_list.append(desc_list[j])
37
+ phrase_list.append(' '.join(sub_list))
38
+ else:
39
+ phrase_list.append(' '.join(desc_list))
40
+
41
+ return phrase_list
42
+
43
+
44
+ def find_answers_new(description: str):
45
+ sentences = generate_phrases(description, sentence_length)
46
+ sentences_embedding = model.encode(sentences)
47
+
48
+ answers = []
49
+
50
+ for question in questions:
51
+ query_embedding = model.encode(question)
52
+ similarities = util.cos_sim(query_embedding, sentences_embedding)
53
+
54
+ similarity_i = 0
55
+
56
+ new_row = None
57
+
58
+ for similarity in similarities[0]:
59
+ model_answer = sentences[similarity_i]
60
+
61
+ similarity_i += 1
62
+
63
+ if round(similarity.item(), 2) > threshold:
64
+ if new_row is not None and similarity.item() < new_row['Similarity']:
65
+ continue
66
+
67
+ new_row = {'ModelAnswer': model_answer, 'Similarity': similarity.item()}
68
+
69
+ if new_row is not None:
70
+ answers.append(new_row['ModelAnswer'])
71
+ else:
72
+ answers.append('No answer')
73
+ return answers
74
+
75
+
76
+ authorized_users = [("test_user_account", "test_user_pwd"), ]
77
+
78
+ demo = gr.Interface(fn=find_answers_new,
79
+ inputs=[gr.Textbox(lines=20, label="Item Description", placeholder="Desc Here...")],
80
+ outputs=[gr.Textbox(lines=1, label="Is it new or used"),
81
+ gr.Textbox(lines=1, label="Are there any wear & tear"),
82
+ gr.Textbox(lines=1, label="Does it come with dust bag, receipt & original box"),
83
+ gr.Textbox(lines=1, label="Are there any scratches, marks"),
84
+ gr.Textbox(lines=1, label="Are there any fading, stains, discolorization"),
85
+ gr.Textbox(lines=1,
86
+ label="Is this item customized, repainted or has hardware been replaced"),
87
+ gr.Textbox(lines=1, label="Is it special edition"),
88
+ gr.Textbox(lines=1, label="Is there any odour"),
89
+ gr.Textbox(lines=1, label="Are there multiple items or extra add-ons in this listing?"),
90
+ gr.Textbox(lines=1, label="Is there a date code or serial number present on the item?")
91
+ ])
92
+ demo.launch(debug=False, share=True, auth=authorized_users)
requirements.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ gradio~=4.36.1
2
+ pandas~=2.2.2
3
+ nltk~=3.8.1
4
+ numpy~=1.26.4
5
+ spacy~=3.7.5
6
+ beautifulsoup4~=4.12.3
7
+ scikit-learn~=1.5.0
8
+ sentence-transformers~=2.2.2