The steerability of large language models toward data-driven personas

Junyi LiCharith PerisNinareh MehrabiPalash GoyalKai-Wei ChangAram GalstyanRichard S. ZemelRahul Gupta

article2024NAACL67 citations

Proposes a collaborative filtering framework that maps survey responses into continuous embedding spaces to steer large language models toward distinct individual and group viewpoints more accurately than demographic-based prompting.

Listen

Large language models often exhibit viewpoint bias by over-representing certain populations while under-representing others, such as older adults or specific religious groups. Addressing this issue is critical as these systems are increasingly deployed across high-stakes domains like healthcare, finance, and education. Traditional attempts to steer model outputs rely on broad demographic categories like age, race, or political party, which fail to capture the nuanced, cross-cutting beliefs found within real populations.

The article demonstrates a data-driven approach to steer large language models toward distinct personas based on actual opinion patterns rather than static demographic traits. The primary objective is to evaluate whether defining personas through collaborative filtering improves the controllable generation of diverse viewpoints.

To accomplish this, the authors used survey data from the OpinionQA dataset, covering 18,339 participants and 1,476 multiple-choice questions across 23 topics. They applied collaborative filtering to map individual response histories into continuous 16-dimensional vectors, creating individual personas as well as six distinct cluster personas grouped by response similarity. A compact soft-prompting model—a two-layer neural network—was trained to convert these opinion vectors into virtual tokens that steer frozen language models without requiring full model retraining. The approach was benchmarked against standard prompting, demographic prompting, and context-based prompting across four language models (GPT-Neo-1.3B, GPT-Neo-2.7B, GPT-j-6B, and Falcon-7B-Instruct).

The analysis yielded several key findings. First, steering language models using individual data-driven personas achieved prediction accuracies between roughly 60% and 62%, representing a 57% to 77% relative improvement over the best baseline methods, which only achieved 30% to 39% accuracy. Second, cluster personas representing opinion centroids performed within 8% to 12% of individual embeddings and consistently outperformed demographic-based embeddings (such as political party traits) by up to 2.59%. Third, the method generalized effectively to unseen individuals: using just a single response to construct a user vector yielded roughly 39% to 41% accuracy, outperforming the baseline methods, with accuracy steadily rising above 57% as more individual responses were observed. Finally, demographic analysis revealed that the opinion clusters naturally contained diverse mixes of demographic traits, confirming that shared viewpoints do not strictly align with standard demographic boundaries.

These findings indicate that data-driven personas offer a far more accurate, scalable, and computationally efficient way to represent diverse viewpoints in artificial intelligence systems. By avoiding full model fine-tuning and instead using lightweight soft prompting, organizations can reduce training costs and compute overhead while preventing polarization and ensuring under-represented perspectives are faithfully simulated.

Organizations deploying conversational systems should consider replacing static demographic personas with data-driven opinion embeddings when simulating human perspectives. However, practitioners must conduct careful audits of source opinion datasets prior to deployment, as steering models toward specific user viewpoints can inadvertently amplify harmful biases present in the training data. Future work should validate this approach across additional datasets and survey formats, as well as test other parameter-efficient adaptation methods like low-rank adaptation.

arXiv: 2311.04978

No sufficiently relevant recommendations were found.

Cover for The steerability of large language models toward data-driven personas

Abstract

Steerability is the ability of large language models (LLMs) to follow diverse instructions and adapt to different personas. In this paper, we study the steerability of LLMs toward data-driven personas. We introduce a new dataset of personas with diverse backgrounds and characteristics, and propose a method to steer LLMs toward these personas. We find that LLMs can be steered toward data-driven personas to a significant extent, and that the steerability of LLMs varies across different personas and tasks. We also find that the steerability of LLMs can be improved by fine-tuning on persona-specific data.

Table of Contents

  • 1 Introduction
  • 2 Related Work
  • 3 Framework
  • 3.1 Data-driven persona definition
  • 3.2 Steering LLMs towards data-driven personas
  • 4 Experimental results
  • 4.1 Dataset Details
  • 4.2 Analysis of cluster personas
  • 4.3 Steering LLMs towards personas
  • 4.3.1 Individual opinion prediction
  • 4.3.2 Effectiveness of the SPM
  • 4.3.3 Performance of cluster personas
  • 4.3.4 Generalization to unseen individuals
  • 5 Conclusion
  • Limitations
  • Ethical Considerations
  • References
  • A Additional details on the Dataset and the Experiments
  • A.1 Additional information on the OpinionQA dataset
  • A.2 Details of optimizing Eq. (1)
  • A.3 Architecture of the SPM
  • A.4 Prompt templates of baseline methods
  • A.5 Additional experimental results

Knowls

  1. Knowl 1 — Collaborative filtering defines individual and cluster personas

    definition

    A data-driven persona represents a location in an opinion embedding space learned from people’s answers, rather than a group specified in advance by demographic traits. An individual persona is one respondent’s embedding; a cluster persona is the centroid of embeddings for a group of respondents with similar answers.

    Let PP be the set of people and QQ the set of ordinal multiple-choice questions. For an observed answer by person i∈Pi\in P to question j∈Qj\in Q, let ri,j∈[0,1]r_{i,j}\in[0,1] be the answer’s numeric encoding; missing answers are excluded. Let ui∈Rdu_i\in\mathbb{R}^d be the embedding of person ii and qj∈Rdq_j\in\mathbb{R}^d the embedding of question jj. Collaborative filtering learns these vectors by minimizing a loss over observed answers:

    min⁡{ui},{qj}∑(i,j)∈Rℓ(⟨ui,qj⟩,ri,j),\min_{\{u_i\},\{q_j\}}\sum_{(i,j)\in\mathcal{R}}\ell(\langle u_i,q_j\rangle,r_{i,j}),

    where R⊆P×Q\mathcal{R}\subseteq P\times Q is the set of observed person–question pairs, ⟨⋅,⋅⟩\langle\cdot,\cdot\rangle is the vector inner product, and ℓ\ell is a prediction loss such as mean squared error. The learned person vectors encode patterns across their answers and can be used directly as individual personas or averaged within clusters to form cluster personas.

  2. Knowl 2 — A shared soft-prompting model steers an LLM from persona embeddings

    model/method

    The steering method trains one soft-prompting model (SPM) to map a persona embedding to virtual prefix tokens for a frozen language model (LLM). The generated virtual tokens are prepended to the tokenized question; for prefix tuning, prefix vectors are inserted at each transformer layer. Unlike training a separate prefix for every persona, the shared SPM generates prefixes from each persona’s embedding.

    For each observed answer, training minimizes token-level cross-entropy:

    min⁡θ∑(i,j)∈RtrainℓCE(LLM(f(ui;θ),Qj),Ri,j),\min_{\theta}\sum_{(i,j)\in\mathcal{R}_{\mathrm{train}}}\ell_{\mathrm{CE}}\bigl(\mathrm{LLM}(f(u_i;\theta),Q_j),R_{i,j}\bigr),

    where θ\theta denotes SPM parameters, f(ui;θ)f(u_i;\theta) is the set of virtual tokens generated from person ii’s embedding, QjQ_j is the tokenized question, Ri,jR_{i,j} is the tokenized observed answer, and Rtrain\mathcal{R}_{\mathrm{train}} is the set of training person–question pairs. The LLM weights are held fixed while the SPM is trained. At inference, the trained SPM is fixed and receives the target individual’s embedding or a cluster-centroid embedding.

    The tested SPM is a two-layer MLP with 32 hidden units and one virtual token. Its prefix output has shape [T,N×2×D][T,N\times2\times D], where TT is the number of virtual tokens, NN the number of LLM layers, and DD the token dimension; for Falcon’s multi-query attention, the output shape is [T,N×2×D/H][T,N\times2\times D/H], with HH attention heads. The SPM was trained for 10 epochs with AdamW, learning rate 0.001, and weight decay 0.001, using early stopping.

  3. Knowl 3 — OpinionQA evaluation uses held-out answers and individual-level accuracy

    experimental setup

    Experiments use OpinionQA, a dataset derived from 15 American Trends Panel polls, containing responses from 18,339 participants to 1,476 ordinal multiple-choice questions across 23 topics. Ordinal response options are mapped to numeric values in [0,1][0,1] for collaborative-filtering training.

    Participants are randomly partitioned into training and evaluation groups, and responses within each group are further randomly split into training and validation sets. For the principal evaluation, collaborative filtering and SPM training use training-participant training responses; accuracy is evaluated on the held-out responses of those same training participants. Prediction accuracy is the macro-average of each individual’s percentage of correctly predicted answers.

    The comparisons use GPT-Neo-1.3B, GPT-Neo-2.7B, GPT-J-6B, and Falcon-7B-Instruct. Baselines prompt with the question alone (Raw Q.), the person’s demographic traits plus the question, or the question plus contextual answers from that person. For the context baseline, the five most similar answered training questions are selected using cosine similarity between question embeddings from OpenAI text-embedding-ada-002.

  4. Knowl 4 — Individual personas substantially improve opinion prediction

    empirical result

    On held-out answers from participants represented during training, individual-embedding steering yields higher macro-averaged individual prediction accuracy than question-only, demographic-prompt, or answer-context baselines for all four tested LLMs. Relative to the best baseline for each model, the reported improvement is 57%–77%.

    Model Raw Q. Demographic + Raw Q. Context + Raw Q. Individual embeddings
    GPT-Neo-1.3B 32.54% 33.40% 33.82% 59.99%
    GPT-Neo-2.7B 31.09% 34.32% 30.43% 60.59%
    GPT-J-6B 26.50% 31.86% 39.34% 61.84%
    Falcon-7B-Instruct 36.10% 38.40% 37.96% 60.78%
  5. Knowl 5 — Six learned clusters capture distinct, mixed-demographic opinion profiles

    empirical result

    For cluster personas, the authors apply K-means to 16-dimensional collaborative-filtering person embeddings and choose six clusters using an elbow heuristic based on how well cluster centroids represent responses. The resulting clusters have different demographic compositions but are not simply demographic groups: clusters 0 and 1 lean Republican, while the others lean Democratic; cluster 5 has a majority of Black and Hispanic members, while the other clusters are predominantly White. Education also varies across clusters: clusters 0–1 are predominantly college educated, clusters 2–3 have majorities with postgraduate education, and clusters 4–5 have majorities with high-school education.

    The clusters also differ on issues. For example, for the question about allowing more legal immigrants, cluster 0 most often selected “a lower priority” (72.81%), clusters 1 and 5 selected “top priority” (99.05% and 69.51%), and clusters 2, 3, and 4 most often selected “important, but not top priority” (80.44%, 89.87%, and 63.92%). On whether reducing illegal immigration would reduce economic inequality, cluster 0 most often answered “a great deal” (60.63%), as did cluster 1 (95.58%); clusters 2 and 3 most often answered “not too much” (68.95% and 68.67%), and clusters 4 and 5 “a fair amount” (69.41% and 69.67%).

    The clusters can also diverge sharply from population-level responses. In cluster 0, 71.55% said expanding government benefits for the poor would do “not too much” to reduce inequality, compared with 19.83% in the overall population; 72.46% said easier legal access to guns contributes “not too much” to gun violence, compared with 14.51% overall. These examples illustrate the finer-grained opinion groupings that the data-driven personas are intended to capture.

  6. Knowl 6 — Cluster personas outperform demographic centroids, and more clusters narrow the gap to individuals

    empirical result

    With six cluster personas, steering accuracy exceeds the accuracy from political-party demographic embeddings for all four models, although individual embeddings perform best. The experiment uses political party because it was the strongest-performing single demographic trait. Increasing the number of clusters from 6 to 50 steadily raises cluster-persona accuracy toward individual-persona accuracy.

    Model Party (6 groups) 6 clusters 10 clusters 20 clusters 30 clusters 50 clusters Individual
    GPT-Neo-1.3B 55.16% 55.57% 56.65% 58.11% 58.41% 58.74% 59.99%
    GPT-Neo-2.7B 55.66% 55.79% 56.93% 58.61% 58.93% 59.42% 60.59%
    GPT-J-6B 55.64% 55.82% 57.13% 58.97% 59.52% 59.86% 61.84%
    Falcon-7B-Instruct 52.87% 54.24% 56.72% 58.99% 59.18% 59.39% 60.78%
  7. Knowl 7 — Persona embeddings generalize to unseen people when given a few answers

    empirical result

    To test generalization, the SPM is trained on one participant partition and then used for participants whose responses were not seen during SPM training. Their embeddings are inferred from KK available answers using question embeddings learned from the training participants and held fixed. Evaluation uses other held-out answers from those unseen participants. Even with one available answer per person, the method beats all three prompting baselines for each tested LLM; accuracy rises as more answers are used to infer the persona.

    Model Raw Q. Demographic + Raw Q. Context + Raw Q. K=1K=1 K=5K=5 K=10K=10 K=20K=20 K=50K=50 K=100K=100
    GPT-Neo-1.3B 32.22% 33.57% 33.97% 40.02% 46.83% 49.97% 53.27% 56.18% 57.74%
    GPT-Neo-2.7B 31.57% 33.94% 30.54% 40.40% 46.58% 48.75% 50.90% 52.66% 53.29%
    GPT-J-6B 26.58% 32.10% 39.32% 41.41% 49.29% 52.19% 55.08% 57.73% 58.75%
    Falcon-7B-Instruct 36.15% 38.22% 38.12% 39.11% 48.12% 51.16% 53.87% 56.76% 57.83%
  8. Knowl 8 — Training the SPM is essential, and prompt tuning also supports steering

    empirical result

    Prediction accuracy improves substantially when the SPM is trained rather than initialized with random weights. The authors also implement the method with prompt tuning instead of prefix tuning; prompt tuning remains more accurate than the prompting baselines in the principal comparison, though it is slightly less accurate than prefix tuning for every tested model.

    Model Random SPM weights Trained prefix-tuning SPM Prompt-tuning SPM
    GPT-Neo-1.3B 7.92% 59.99% 59.65%
    GPT-Neo-2.7B 8.31% 60.59% 58.96%
    GPT-J-6B 23.26% 61.84% 59.41%
    Falcon-7B-Instruct 38.20% 60.78% 57.98%
  9. Knowl 9 — Evaluation scope and bias risks limit the conclusions

    limitation

    The study relies on a question-and-answer format to learn opinion embeddings and evaluates the method on only one dataset, OpinionQA. It tests prefix tuning and prompt tuning, but not other parameter-efficient tuning approaches such as LoRA or (IA)³. The authors also caution that tuning on a dataset of individual opinions could cause an LLM to reproduce or intensify biases present in those opinions; they state that training data should be carefully audited before practical use.

Coverage note — Detailed response profiles for every cluster, additional demographic-composition plots, and the context-baseline sample-count ablation are omitted because they are supplementary analyses rather than necessary to reconstruct the central method and findings.

References

  1. 1.Lisa P Argyle, Ethan C Busby, Nancy Fulda, Joshua R Gubler, Christopher Rytting, and David Wingate. 2023. Out of one, many: Using language models to simulate human samples. Political Analysis, 31(3):337–351.
  2. 2.Christopher M. Bishop. 2006. Pattern Recognition and Machine Learning. Springer.
  3. 3.Tom Brown, Benjamin Mann, Nick Ryder, Melanie Subbiah, Jared D Kaplan, Prafulla Dhariwal, Arvind Neelakantan, Pranav Shyam, Girish Sastry, Amanda Askell, et al. 2020. Language models are few-shot learners. Advances in neural information processing systems, 33:1877–1901.
  4. 4.Ameet Deshpande, Vishvak Murahari, Tanmay Rajpurohit, Ashwin Kalyan, and Karthik Narasimhan. 2023. Toxicity in chatgpt: Analyzing persona-assigned language models. arXiv preprint arXiv:2304.05335.
  5. 5.Esin Durmus, Karina Nyugen, Thomas I Liao, Nicholas Schiefer, Amanda Askell, Anton Bakhtin, Carol Chen, Zac Hatfield-Dodds, Danny Hernandez, Nicholas Joseph, et al. 2023. Towards measuring the representation of subjective global opinions in language models. arXiv preprint arXiv:2306.16388.
  6. 6.Shangbin Feng, Chan Young Park, Yuhan Liu, and Yulia Tsvetkov. 2023. From pretraining data to language models to downstream tasks: Tracking the trails of political biases leading to unfair nlp models. arXiv preprint arXiv:2305.08283.
  7. 7.Edward J Hu, Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, and Weizhu Chen. 2021. Lora: Low-rank adaptation of large language models. arXiv preprint arXiv:2106.09685.
  8. 8.EunJeong Hwang, Bodhisattwa Prasad Majumder, and Niket Tandon. 2023. Aligning language models to user opinions. arXiv preprint arXiv:2305.14929.
  9. 9.Hang Jiang, Doug Beeferman, Brandon Roy, and Deb Roy. 2022. Communitylm: Probing partisan worldviews from language models. arXiv preprint arXiv:2209.07065.
  10. 10.Brian Lester, Rami Al-Rfou, and Noah Constant. 2021. The power of scale for parameter-efficient prompt tuning. arXiv preprint arXiv:2104.08691.
  11. 11.Xiang Lisa Li and Percy Liang. 2021. Prefix-tuning: Optimizing continuous prompts for generation. arXiv preprint arXiv:2101.00190.
  12. 12.Haokun Liu, Derek Tam, Mohammed Muqeeth, Jay Mohta, Tenghao Huang, Mohit Bansal, and Colin A Raffel. 2022. Few-shot parameter-efficient fine-tuning is better and cheaper than in-context learning. Advances in Neural Information Processing Systems, 35:1950–1965.
  13. 13.Xiao Liu, Yanan Zheng, Zhengxiao Du, Ming Ding, Yujie Qian, Zhilin Yang, and Jie Tang. 2021. Gpt understands, too. arXiv preprint arXiv:2103.10385.
  14. 14.Ilya Loshchilov and Frank Hutter. 2017. Decoupled weight decay regularization. arXiv preprint arXiv:1711.05101.
  15. 15.OpenAI. 2023. New and improved embedding model. https://openai.com/blog/new-and-improved-embedding-model. Accessed: [insert date of access].
  16. 16.OpenAI. 2023. Gpt-4 technical report. arXiv, pages 2303–08774.
  17. 17.Long Ouyang, Jeffrey Wu, Xu Jiang, Diogo Almeida, Carroll Wainwright, Pamela Mishkin, Chong Zhang, Sandhini Agarwal, Katarina Slama, Alex Ray, et al. 2022. Training language models to follow instructions with human feedback. Advances in Neural Information Processing Systems, 35:27730–27744.
  18. 18.Mustafa Safa Ozdayi, Charith S. Peris, Jack G. M. FitzGerald, Christophe Dupuy, Jimit Majmudar, Haidar Khan, Rahil Parikh, and Rahul Gupta. 2023. Controlling the extraction of memorized data from large language models via prompt-tuning. In Annual Meeting of the Association for Computational Linguistics.
  19. 19.Leonard Salewski, Stephan Alaniz, Isabel Rio-Torto, Eric Schulz, and Zeynep Akata. 2023. In-context impersonation reveals large language models’ strengths and biases. arXiv preprint arXiv:2305.14930.
  20. 20.Shibani Santurkar, Esin Durmus, Faisal Ladhak, Cinoo Lee, Percy Liang, and Tatsunori Hashimoto. 2023. Whose opinions do language models reflect? arXiv preprint arXiv:2303.17548.
  21. 21.Sebastin Santy, Jenny T Liang, Ronan Le Bras, Katharina Reinecke, and Maarten Sap. 2023. Nlpositionality: Characterizing design biases of datasets and models. arXiv preprint arXiv:2306.01943.
  22. 22.Nino Scherrer, Claudia Shi, Amir Feder, and David M Blei. 2023. Evaluating the moral beliefs encoded in llms. arXiv preprint arXiv:2307.14324.
  23. 23.Noam Shazeer. 2019. Fast transformer decoding: One write-head is all you need. arXiv preprint arXiv:1911.02150.
  24. 24.Gabriel Simmons. 2022. Moral mimicry: Large language models produce moral rationalizations tailored to political identity. arXiv preprint arXiv:2209.12106.
  25. 25.Karan Singhal, Shekoofeh Azizi, Tao Tu, S Sara Mahdavi, Jason Wei, Hyung Won Chung, Nathan Scales, Ajay Tanwani, Heather Cole-Lewis, Stephen Pfohl, et al. 2023. Large language models encode clinical knowledge. Nature, pages 1–9.
  26. 26.Kehui Tan, Tianqi Pang, and Chenyou Fan. 2023. Towards applying powerful large ai models in classroom teaching: Opportunities, challenges and prospects. arXiv preprint arXiv:2305.03433.
  27. 27.Hugo Touvron, Louis Martin, Kevin Stone, Peter Albert, Amjad Almahairi, Yasmine Babaei, Nikolay Bashlykov, Soumya Batra, Prajjwal Bhargava, Shruti Bhosale, et al. 2023. Llama 2: Open foundation and fine-tuned chat models. arXiv preprint arXiv:2307.09288.
  28. 28.Shijie Wu, Ozan Irsoy, Steven Lu, Vadim Dabravolski, Mark Dredze, Sebastian Gehrmann, Prabhanjan Kambadur, David Rosenberg, and Gideon Mann. 2023. Bloomberggpt: A large language model for finance. arXiv preprint arXiv:2303.17564.
  29. 29.Renrui Zhang, Jiaming Han, Aojun Zhou, Xiangfei Hu, Shilin Yan, Pan Lu, Hongsheng Li, Peng Gao, and Yu Qiao. 2023. Llama-adapter: Efficient fine-tuning of language models with zero-init attention. arXiv preprint arXiv:2303.16199.
  30. 30.Wayne Xin Zhao, Kun Zhou, Junyi Li, Tianyi Tang, Xiaolei Wang, Yupeng Hou, Yingqian Min, Beichen Zhang, Junjie Zhang, Zican Dong, et al. 2023. A survey of large language models. arXiv preprint arXiv:2303.18223.

Citation

MLA
Li, J., et al. “The Steerability of Large Language Models Toward Data-driven Personas”. Proceedings of the 2024 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies (Volume 1: Long Papers), 2024, pp. 7290–305, https://doi.org/10.18653/v1/2024.naacl-long.405.
APA
Li, J., Peris, C., Mehrabi, N., Goyal, P., Chang, K.-W., Galstyan, A., Zemel, R., & Gupta, R. (2024). The steerability of large language models toward data-driven personas. Proceedings of the 2024 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies (Volume 1: Long Papers), 7290–7305. https://doi.org/10.18653/v1/2024.naacl-long.405
Chicago
Li, J., C. Peris, N. Mehrabi, et al. 2024. “The Steerability of Large Language Models Toward Data-driven Personas”. Proceedings of the 2024 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies (Volume 1: Long Papers), 7290–7305. https://doi.org/10.18653/v1/2024.naacl-long.405.
Harvard
Li, J. et al. (2024) “The steerability of large language models toward data-driven personas”, Proceedings of the 2024 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies (Volume 1: Long Papers). Association for Computational Linguistics, pp. 7290–7305. Available at: https://doi.org/10.18653/v1/2024.naacl-long.405.
Vancouver
1. Li J, Peris C, Mehrabi N, Goyal P, Chang K-W, Galstyan A, Zemel R, Gupta R (2024) The steerability of large language models toward data-driven personas. In: Proceedings of the 2024 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies (Volume 1: Long Papers). Association for Computational Linguistics, pp 7290–7305

BibTeX

@inproceedings{li-etal-2024-steerability,
    title = "The steerability of large language models toward data-driven personas",
    author = "Li, Junyi  and
      Peris, Charith  and
      Mehrabi, Ninareh  and
      Goyal, Palash  and
      Chang, Kai-Wei  and
      Galstyan, Aram  and
      Zemel, Richard  and
      Gupta, Rahul",
    editor = "Duh, Kevin  and
      Gomez, Helena  and
      Bethard, Steven",
    booktitle = "Proceedings of the 2024 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies (Volume 1: Long Papers)",
    month = jun,
    year = "2024",
    address = "Mexico City, Mexico",
    publisher = "Association for Computational Linguistics",
    url = "https://aclanthology.org/2024.naacl-long.405/",
    doi = "10.18653/v1/2024.naacl-long.405",
    pages = "7290--7305"
}
Metadata:ACL Anthology

Access the Paper

This paper is available from its original source. Click below to access the PDF.

Open PDF
License: https://creativecommons.org/licenses/by/4.0/