Yondika Vio Landa commited on
Commit
15d9901
·
1 Parent(s): 2fdef2d

update for hf

Browse files
Files changed (7) hide show
  1. .dockerignore +11 -0
  2. Dockerfile +11 -0
  3. app/__init__.py +0 -0
  4. app/filter_review.py +22 -0
  5. app/main.py +24 -0
  6. app/model.py +8 -0
  7. requirements.txt +5 -0
.dockerignore ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ __pycache__/
2
+ train/
3
+ *.csv
4
+ *.bin
5
+ *.pt
6
+ logs/
7
+ *.ipynb
8
+ *.md
9
+ *.safatensors
10
+ app/finetuned_model/
11
+ finetuned_model/checkpoint-*
Dockerfile ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.10-slim
2
+
3
+ WORKDIR /code
4
+
5
+ COPY requirements.txt .
6
+ RUN pip install --no-cache-dir -r requirements.txt
7
+
8
+ COPY . /code
9
+
10
+ EXPOSE 7860
11
+ CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"]
app/__init__.py ADDED
File without changes
app/filter_review.py ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
2
+ import torch
3
+ import torch.nn.functional as F
4
+
5
+ MODEL_FINETUNED = "yondikavl/artour-spam-filter"
6
+
7
+ device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
8
+
9
+ model = AutoModelForSequenceClassification.from_pretrained( MODEL_FINETUNED)
10
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_FINETUNED)
11
+ model.eval()
12
+
13
+ def filter_review(text):
14
+ inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True, max_length=128)
15
+ inputs = {k: v.to(device) for k, v in inputs.items()}
16
+ with torch.no_grad():
17
+ outputs = model(**inputs)
18
+ probs = F.softmax(outputs.logits, dim=1)
19
+ pred = torch.argmax(probs, dim=1).item()
20
+ label = "spam" if pred == 1 else "non-spam"
21
+ confidence = probs[0][pred].item()
22
+ return label, confidence
app/main.py ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from fastapi import FastAPI
2
+ from pydantic import BaseModel
3
+ from app.filter_review import filter_review
4
+ import os
5
+
6
+ os.environ['TRANSFORMERS_CACHE'] = '/tmp/hf_cache'
7
+ os.makedirs('/tmp/hf_cache', exist_ok=True)
8
+
9
+ app = FastAPI()
10
+
11
+ @app.get("/")
12
+ def read_root():
13
+ return {"message": "Selamat datang di API Filter Ulasan Spam untuk ArTour!"}
14
+
15
+ class FilterReviewRequest(BaseModel):
16
+ text: str
17
+
18
+ @app.post("/filter-review")
19
+ def filter_spam(request: FilterReviewRequest):
20
+ label, confidence = filter_review(request.text)
21
+
22
+ binary_label = 1 if label.lower() == "spam" else 0
23
+
24
+ return {"label": binary_label, "confidence": confidence}
app/model.py ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ from transformers import AutoTokenizer, AutoModelForSequenceClassification
2
+
3
+ MODEL_NAME = "indobenchmark/indobert-base-p1"
4
+ MODEL_FINETUNED = "yondikavl/artour-spam-filter"
5
+
6
+ tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
7
+ model = AutoModelForSequenceClassification.from_pretrained(MODEL_FINETUNED)
8
+ model.eval()
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ fastapi
2
+ uvicorn
3
+ transformers
4
+ pydantic
5
+ https://download.pytorch.org/whl/cpu/torch-2.1.2%2Bcpu-cp310-cp310-linux_x86_64.whl