File size: 2,930 Bytes
88b8225
a065de3
f8c382e
ecb9c1c
a065de3
 
 
 
329231e
a065de3
 
 
 
 
98bbc63
a065de3
 
 
 
 
 
 
 
 
 
8fbe768
a065de3
 
 
 
0489530
a065de3
 
f8c382e
a065de3
 
 
 
 
 
 
8fbe768
f8c382e
1ca069a
a065de3
493ea2f
a065de3
 
 
 
 
 
8848c4c
a065de3
 
 
f8c382e
a065de3
 
 
 
8848c4c
a065de3
 
 
 
 
 
 
 
7fb592c
88b8225
f8c382e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import streamlit as st
from transformers import pipeline, AutoTokenizer, AutoModelForMaskedLM
import torch

# تنظیمات صفحه
st.set_page_config(page_title="دستیار هوش مصنوعی (پر کردن ماسک)", layout="wide")

# تابع بارگذاری مدل و pipeline
@st.cache_resource
def load_model_and_pipeline():
    # بارگذاری pipeline
    pipe = pipeline("fill-mask", model="HooshvareLab/bert-fa-base-uncased")

    # بارگذاری مدل و توکنایزر به صورت مستقیم
    tokenizer = AutoTokenizer.from_pretrained("HooshvareLab/bert-fa-base-uncased")
    model = AutoModelForMaskedLM.from_pretrained("HooshvareLab/bert-fa-base-uncased")

    return pipe, tokenizer, model

pipe, tokenizer, model = load_model_and_pipeline()

# تابع پیش‌بینی با pipeline
def predict_with_pipeline(text):
    results = pipe(text)
    return [{"word": res["token_str"], "score": res["score"]} for res in results]

# تابع پیش‌بینی با مدل مستقیم
def predict_with_model(text):
    inputs = tokenizer(text, return_tensors="pt")
    mask_token_index = torch.where(inputs["input_ids"] == tokenizer.mask_token_id)[1]

    # اجرای مدل
    outputs = model(**inputs)
    logits = outputs.logits

    # پیدا کردن توکن‌های برتر
    mask_token_logits = logits[0, mask_token_index, :]
    top_tokens = torch.topk(mask_token_logits, 5, dim=1).indices[0].tolist()

    results = [{"word": tokenizer.decode([token])} for token in top_tokens]
    return results

# رابط کاربری
def main():
    st.title("دستیار هوش مصنوعی (پر کردن ماسک)")

    # ورودی کاربر
    st.subheader("ورودی متن:")
    text = st.text_input(
        "متن خود را وارد کنید (از [MASK] برای نشان دادن کلمه حذف شده استفاده کنید):",
        value="ما در هوشواره معتقدیم [MASK] دانش و آگاهی می‌تواند جامعه را تغییر دهد.",
    )

    if st.button("پیش‌بینی با pipeline"):
        if "[MASK]" not in text:
            st.error("لطفاً یک متن شامل [MASK] وارد کنید.")
        else:
            st.subheader("نتایج پیش‌بینی با pipeline:")
            predictions = predict_with_pipeline(text)
            for pred in predictions:
                st.write(f"کلمه: {pred['word']} - احتمال: {pred['score']:.2f}")

    if st.button("پیش‌بینی با مدل مستقیم"):
        if "[MASK]" not in text:
            st.error("لطفاً یک متن شامل [MASK] وارد کنید.")
        else:
            st.subheader("نتایج پیش‌بینی با مدل مستقیم:")
            predictions = predict_with_model(text)
            for pred in predictions:
                st.write(f"کلمه: {pred['word']}")

if __name__ == "__main__":
    main()